/*     */ package com.iris.egrant.utils;
/*     */ 
/*     */ import com.iris.egrant.exception.ServiceException;
/*     */ import java.io.Serializable;
/*     */ import java.lang.reflect.Field;
/*     */ import java.lang.reflect.Method;
/*     */ import java.lang.reflect.Modifier;
/*     */ import java.lang.reflect.ParameterizedType;
/*     */ import java.lang.reflect.Type;
/*     */ import java.util.ArrayList;
/*     */ import java.util.Collection;
/*     */ import java.util.Date;
/*     */ import java.util.List;
/*     */ import javax.persistence.EmbeddedId;
/*     */ import javax.persistence.Id;
/*     */ import org.apache.commons.beanutils.ConvertUtils;
/*     */ import org.apache.commons.beanutils.Converter;
/*     */ import org.apache.commons.beanutils.PropertyUtils;
/*     */ import org.apache.commons.beanutils.converters.DateConverter;
/*     */ import org.apache.commons.lang.StringUtils;
/*     */ import org.slf4j.Logger;
/*     */ import org.slf4j.LoggerFactory;
/*     */ import org.springframework.util.Assert;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public class ReflectionUtils
/*     */ {
/*  37 */   private static Logger logger = LoggerFactory.getLogger(ReflectionUtils.class);
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static Object getFieldValue(Object object, String fieldName) {
/*  43 */     Field field = getDeclaredField(object, fieldName);
/*     */     
/*  45 */     if (field == null) {
/*  46 */       throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + object + "]");
/*     */     }
/*     */     
/*  49 */     makeAccessible(field);
/*     */     
/*  51 */     Object result = null;
/*     */     try {
/*  53 */       result = field.get(object);
/*  54 */     } catch (IllegalAccessException e) {
/*  55 */       logger.error("不可能抛出的异常{}", e.getMessage());
/*     */     } 
/*  57 */     return result;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static void setFieldValue(Object object, String fieldName, Object value) {
/*  64 */     Field field = getDeclaredField(object, fieldName);
/*     */     
/*  66 */     if (field == null) {
/*  67 */       throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + object + "]");
/*     */     }
/*     */     
/*  70 */     makeAccessible(field);
/*     */     
/*     */     try {
/*  73 */       field.set(object, value);
/*  74 */     } catch (IllegalAccessException e) {
/*  75 */       logger.error("不可能抛出的异常:{}", e.getMessage());
/*     */     } 
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static Object invokeMethod(Object object, String methodName, Class<?>[] parameterTypes, Object[] parameters) {
/*  84 */     Method method = getDeclaredMethod(object, methodName, parameterTypes);
/*  85 */     if (method == null) {
/*  86 */       throw new IllegalArgumentException("Could not find method [" + methodName + "] on target [" + object + "]");
/*     */     }
/*     */     
/*  89 */     method.setAccessible(true);
/*     */     
/*     */     try {
/*  92 */       return method.invoke(object, parameters);
/*  93 */     } catch (Exception e) {
/*  94 */       throw convertReflectionExceptionToUnchecked(e);
/*     */     } 
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   protected static Field getDeclaredField(Object object, String fieldName) {
/* 104 */     Assert.notNull(object, "object不能为空");
/* 105 */     Assert.hasText(fieldName, "fieldName");
/* 106 */     for (Class<?> superClass = object.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) {
/*     */       
/*     */       try {
/* 109 */         return superClass.getDeclaredField(fieldName);
/* 110 */       } catch (NoSuchFieldException e) {}
/*     */     } 
/*     */ 
/*     */     
/* 114 */     return null;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   protected static void makeAccessible(Field field) {
/* 121 */     if (!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers())) {
/* 122 */       field.setAccessible(true);
/*     */     }
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   protected static Method getDeclaredMethod(Object object, String methodName, Class<?>[] parameterTypes) {
/* 132 */     Assert.notNull(object, "object不能为空");
/*     */     
/* 134 */     for (Class<?> superClass = object.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) {
/*     */       
/*     */       try {
/* 137 */         return superClass.getDeclaredMethod(methodName, parameterTypes);
/* 138 */       } catch (NoSuchMethodException e) {}
/*     */     } 
/*     */ 
/*     */     
/* 142 */     return null;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static <T> Class<T> getSuperClassGenricType(Class clazz) {
/* 154 */     return getSuperClassGenricType(clazz, 0);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static Class getSuperClassGenricType(Class clazz, int index) {
/* 171 */     Type genType = clazz.getGenericSuperclass();
/*     */     
/* 173 */     if (!(genType instanceof ParameterizedType)) {
/* 174 */       logger.warn(clazz.getSimpleName() + "'s superclass not ParameterizedType");
/* 175 */       return Object.class;
/*     */     } 
/*     */     
/* 178 */     Type[] params = ((ParameterizedType)genType).getActualTypeArguments();
/*     */     
/* 180 */     if (index >= params.length || index < 0) {
/* 181 */       logger.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: " + params.length);
/*     */       
/* 183 */       return Object.class;
/*     */     } 
/* 185 */     if (!(params[index] instanceof Class)) {
/* 186 */       logger.warn(clazz.getSimpleName() + " not set the actual class on superclass generic parameter");
/* 187 */       return Object.class;
/*     */     } 
/*     */     
/* 190 */     return (Class)params[index];
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static List convertElementPropertyToList(Collection collection, String propertyName) {
/* 203 */     List<Object> list = new ArrayList();
/*     */     
/*     */     try {
/* 206 */       for (Object obj : collection) {
/* 207 */         list.add(PropertyUtils.getProperty(obj, propertyName));
/*     */       }
/* 209 */     } catch (Exception e) {
/* 210 */       throw convertReflectionExceptionToUnchecked(e);
/*     */     } 
/*     */     
/* 213 */     return list;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static String convertElementPropertyToString(Collection collection, String propertyName, String separator) {
/* 229 */     List list = convertElementPropertyToList(collection, propertyName);
/* 230 */     return StringUtils.join(list, separator);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static Object convertValue(Object value, Class<?> toType) {
/*     */     try {
/* 245 */       DateConverter dc = new DateConverter();
/* 246 */       dc.setUseLocaleFormat(true);
/* 247 */       dc.setPatterns(new String[] { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss" });
/* 248 */       ConvertUtils.register((Converter)dc, Date.class);
/* 249 */       return ConvertUtils.convert(value, toType);
/* 250 */     } catch (Exception e) {
/* 251 */       throw convertReflectionExceptionToUnchecked(e);
/*     */     } 
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static RuntimeException convertReflectionExceptionToUnchecked(Exception e) {
/* 259 */     if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException || e instanceof NoSuchMethodException || e instanceof java.lang.reflect.InvocationTargetException)
/*     */     {
/* 261 */       return new IllegalArgumentException("Reflection Exception.", e);
/*     */     }
/* 263 */     return new RuntimeException(e);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public static Serializable getId(Object obj) throws ServiceException {
/*     */     try {
/* 271 */       Assert.notNull(obj, "acl domain不允许为空！");
/* 272 */       Field[] fields = obj.getClass().getDeclaredFields();
/* 273 */       Serializable entityKey = null;
/*     */       
/* 275 */       for (Field field : fields) {
/* 276 */         boolean isEntityKey = (field.isAnnotationPresent((Class)Id.class) || field.isAnnotationPresent((Class)EmbeddedId.class));
/*     */         
/* 278 */         if (isEntityKey) {
/*     */           
/* 280 */           Object key = obj.getClass().getMethod("get" + StringUtils.capitalize(field.getName()), new Class[0]).invoke(obj, (Object[])new Class[0]);
/*     */ 
/*     */ 
/*     */           
/* 284 */           entityKey = new Long(key.toString());
/*     */ 
/*     */           
/*     */           break;
/*     */         } 
/*     */       } 
/*     */       
/* 291 */       if (entityKey == null) {
/* 292 */         Method[] methods = obj.getClass().getDeclaredMethods();
/*     */         
/* 294 */         for (Method method : methods) {
/* 295 */           if (method.getName().indexOf("get") != -1) {
/*     */ 
/*     */ 
/*     */             
/* 299 */             boolean isEntityKey = (method.isAnnotationPresent((Class)Id.class) || method.isAnnotationPresent((Class)EmbeddedId.class));
/*     */             
/* 301 */             if (isEntityKey) {
/*     */               
/* 303 */               entityKey = new Long(method.invoke(obj, (Object[])new Class[0]).toString());
/*     */ 
/*     */               
/*     */               break;
/*     */             } 
/*     */           } 
/*     */         } 
/*     */       } 
/*     */ 
/*     */       
/* 313 */       return entityKey;
/*     */     }
/* 315 */     catch (Exception e) {
/* 316 */       logger.error("读取acl domain={}的Id失败！", obj, e);
/*     */ 
/*     */ 
/*     */       
/* 320 */       return null;
/*     */     } 
/*     */   }
/*     */ }


/* Location:              D:\文件kjt\WEB-INF\lib\egrant-core-2.2.20240205.1659.jar!\com\iris\egran\\utils\ReflectionUtils.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       1.1.3
 */